package com.eazyshop.search.service.imp;

import com.alibaba.fastjson.JSON;
import com.eazyshop.goods.feign.SkuFeign;
import com.eazyshop.goods.pojo.Sku;
import com.eazyshop.search.dao.ElasticSearchMapper;
import com.eazyshop.search.pojo.SkuInfo;
import com.eazyshop.search.service.ESservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;


@Service
public class ESserviceImpl implements ESservice {

    @Autowired
    private ElasticSearchMapper elasticSearchMapper;
    @Autowired
    private SkuFeign skuFeign;
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    @Override
    public void createMappingAndIndex() {
        // 创建索引名字
        boolean index = elasticsearchTemplate.createIndex(SkuInfo.class);
        // 创建映射
        elasticsearchTemplate.putMapping(SkuInfo.class);
    }

    /**
     * 导入全部sku数据到索引中
     */
    @Override
    public void importAll() {

        List<Sku> skuListBySpuId = skuFeign.findSkuListBySpuId("all");
        if(skuListBySpuId.size()==0){
            throw new RuntimeException("没有查询到sku列表");
        }
        // 将集合转换为json
        String skuJson = JSON.toJSONString(skuListBySpuId);
        // 将skuJson转换为skuInfo
        List<SkuInfo> skuInfos = JSON.parseArray(skuJson, SkuInfo.class);
        // 规格信息转换为skuInfo
        for (SkuInfo skuInfo : skuInfos) {

            String spec = skuInfo.getSpec();

            Map map = JSON.parseObject(spec, Map.class);

            skuInfo.setSpecMap(map);
        }
        // 导入文档
        elasticSearchMapper.saveAll(skuInfos);

    }

    /**
     * 通过spuID导入对应的sku列表信息到索引中
     * @param spuId
     */
    @Override
    public void importDataBySpuId(String spuId) {
        List<Sku> skuListBySpuId = skuFeign.findSkuListBySpuId(spuId);

        // 转为json

        String jsonString = JSON.toJSONString(skuListBySpuId);

        // 把对应json转为skuInfo对象

        List<SkuInfo> skuInfos = JSON.parseArray(jsonString, SkuInfo.class);

        // 把spec信息转为map集合

        skuInfos.forEach(s->{
            String spec = s.getSpec();
            // 转换为map
            Map map = JSON.parseObject(spec, Map.class);

            s.setSpecMap(map);
        });

        // 把集合存入到es中

        elasticSearchMapper.saveAll(skuInfos);
    }

    @Override
    public void deleteGoodsBySpuId(String spuId) {
        // 根据supID查询出对应的sku数据
        List<Sku> skuListBySpuId = skuFeign.findSkuListBySpuId(spuId);
        // 把对应的sku转换为skuInfo
        String json = JSON.toJSONString(skuListBySpuId);

        List<SkuInfo> skuInfos = JSON.parseArray(json, SkuInfo.class);

        // 使用skuInfos从索引库中删除数据
        elasticSearchMapper.deleteAll(skuInfos);

    }


}
